package ar.fi.uba.celdas.correccion.planificacion;

import java.util.Collection;

import ar.fi.uba.celdas.interfaces.bc.IBaseConocimientos;
import ar.fi.uba.celdas.interfaces.bc.Regla;
import ar.fi.uba.celdas.interfaces.bc.Sensor;
import ar.fi.uba.celdas.interfaces.correccion.ICorreccion;

public abstract class HeuristicaPlanificacion implements ICorreccion {

	protected HeuristicaPlanificacionType type;

	public HeuristicaPlanificacion(HeuristicaPlanificacionType type) {
		this.type = type;
	}

	@Override
	public abstract void corregirRegla(Regla original, IBaseConocimientos bc);

	public HeuristicaPlanificacionType getType() {
		return type;
	}

	// Retorna false cuando alguna condicion no es verificada.
	public final static boolean verificarCondiciones(Collection<Sensor> situacion, Collection<Sensor> condiciones) {
		if (situacion != null && condiciones != null) {
			for (Sensor condicion : condiciones) {
				if (!situacion.contains(condicion)) {
					return false;
				}
			}
			return true;
		}
		return false;
	}

	// Retorna true cuando la situacion no verifica la prediccion.
	public final static boolean verificarPredicciones(Collection<Sensor> situacion, Collection<Sensor> predicciones) {
		if (situacion != null && predicciones != null) {
			for (Sensor prediccion : predicciones) {
				if (!situacion.contains(prediccion)) {
					return false;
				}
			}
			return true;
		}
		return false;
	}

}
